package objetos;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;


import fisica.ObjetoFisico;
import fisica.SimuladorFisico;




public class BoxPush extends ObjetoFisico{



	int contY=0;
	
	//ArrayList<BoxPush> listaBoxPush = new ArrayList<BoxPush>();
	ArrayList<Caixa> listaBoxPush;
	ArrayList<ObjetoFisico> empurradores;
	ArrayList<ObjetoFisico> empurrados;

	//ArrayList<Boolean> verificaColicoes = new ArrayList<Boolean>();

	public int evento, modoEvento;
	
	public double inicioX, inicioY;

	boolean colidiu;

	int bx, by;

	float oldX, oldY;

	long diftimeColicao;

	BufferedImage imagem;
	
	public BoxPush() {
		listaBoxPush = new ArrayList<Caixa>();
	}


	public void dBoxPush(float x, float y, int evento, int modoEvento){
	  /*BoxPush novaBox = new BoxPush();
	  /*novaBox.Y = x;
		novaBox.X = y;
		novaBox.inicioX = x;
		novaBox.inicioY = y;
		novaBox.evento = evento;
		novaBox.modoEvento = modoEvento;
		novaBox.imagem = CanvasGame.instance.imagemBoxPush;
		novaBox.raioDeColisao = 18;
		novaBox.aceleracao = 1;
		novaBox.massa = 100;
		novaBox.velocidadeInicial = 0;*/

	//	listaBoxPush.add(novaBox);
		
/*		novaBox = null;*/
	}
	
	public void addCaixa(float x, float y, int evento, int modoEvento,String nome){
		Caixa caixa;
		caixa = new Caixa(x, y, evento, modoEvento,nome);
		listaBoxPush.add(caixa);
	}

	@Override
	public void SimulaSe(long diftime) {

		diftimeColicao = diftime;
		for(Caixa caixa:listaBoxPush){
			caixa.SimulaSe(diftime);
		//	System.out.println("Caixa::colisaoRetangular : velocidade  "+CanvasGame.instance.heroi.velocidade);
			for(Caixa caixa2:listaBoxPush){
				if(caixa2.nome != caixa.nome){
					if(caixa.colisaoRetangular(caixa2, diftime)){
						break;
					}
				}
			}
			caixa.colisaoRetangular(CanvasGame.instance.heroi, diftime);
			
		}

//		for (int i = 0; i < listaBoxPush.size(); i++) {
//
//			if(listaBoxPush.get(i).modoEvento >= 1 || listaBoxPush.get(i).evento <= 0){	
//
//				listaBoxPush.get(i).oldX = (float) listaBoxPush.get(i).x;
//
//				listaBoxPush.get(i).oldY = (float) listaBoxPush.get(i).y;
//
//
//				
//					//listaBoxPush.get(i).y = listaBoxPush.get(i).y+100* diftime / 1000.0f; // gravidade sempre Puxa para baixo
//				
//
//
//
//				if(CanvasGame.instance.heroi.X < listaBoxPush.get(i).x){
//
//					listaBoxPush.get(i).bx = (int) ((listaBoxPush.get(i).x) / 16);
//					listaBoxPush.get(i).by = (int) ((listaBoxPush.get(i).y+40) / 16);
//
//					if (CanvasGame.instance.mapaGenerico.mapa2[listaBoxPush.get(i).by][listaBoxPush.get(i).bx] > 0) {
//						listaBoxPush.get(i).bx = (int) ((listaBoxPush.get(i).x) / 16);
//						if (CanvasGame.instance.mapaGenerico.mapa2[listaBoxPush.get(i).by-1][listaBoxPush.get(i).bx+1] > 0) {
//							listaBoxPush.get(i).x = (float) (listaBoxPush.get(i).oldX-100 * diftime / 1000.0f);
//						}
//
//						listaBoxPush.get(i).bx = (int) ((listaBoxPush.get(i).x+40) / 16);
//						if (CanvasGame.instance.mapaGenerico.mapa2[listaBoxPush.get(i).by-1][listaBoxPush.get(i).bx-1] > 0) {
//							listaBoxPush.get(i).x = (float) (listaBoxPush.get(i).oldX+100 * diftime / 1000.0f);
//						}
//						listaBoxPush.get(i).y = listaBoxPush.get(i).oldY;
//					}
//
//				}else{
//					listaBoxPush.get(i).bx = (int) ((listaBoxPush.get(i).x+40) / 16);
//					listaBoxPush.get(i).by = (int) ((listaBoxPush.get(i).y+40) / 16);
//
//					if (CanvasGame.instance.mapaGenerico.mapa2[listaBoxPush.get(i).by][listaBoxPush.get(i).bx] > 0) {
//						listaBoxPush.get(i).bx = (int) ((listaBoxPush.get(i).x) / 16);
//						if (CanvasGame.instance.mapaGenerico.mapa2[listaBoxPush.get(i).by-1][listaBoxPush.get(i).bx+1] > 0) {
//							listaBoxPush.get(i).x = (float) (listaBoxPush.get(i).oldX-100 * diftime / 1000.0f);
//						}
//
//						listaBoxPush.get(i).bx = (int) ((listaBoxPush.get(i).x+40) / 16);
//						if (CanvasGame.instance.mapaGenerico.mapa2[listaBoxPush.get(i).by-1][listaBoxPush.get(i).bx-1] > 0) {
//							listaBoxPush.get(i).x = (float) (listaBoxPush.get(i).oldX+100 * diftime / 1000.0f);
//						}
//						listaBoxPush.get(i).y = listaBoxPush.get(i).oldY;
//					}
//				}
//
//				if(listaBoxPush.get(i).y >= 430){
//					listaBoxPush.get(i).x = listaBoxPush.get(i).inicioX;
//					listaBoxPush.get(i).y = listaBoxPush.get(i).inicioY;
//				}
//
//			}
//		}
	}
	@Override
	public boolean estaColidindoChao(){
	/*	int bx = (int) ((X + 16) / 16);
		int by = (int) ((Y + 28) / 16);

		if (CanvasGame.instance.mapaGenerico.mapa2[by][bx] > 0) {
			if (CanvasGame.instance.mapaGenerico.mapa2[by-1][bx+1] > 0) {
				
			}

			if (CanvasGame.instance.mapaGenerico.mapa2[by-1][bx-1] > 0) {
			}
			return true;
		}
		return false;*/
		return false;
	}
	@Override
	public void DesenhaSe(Graphics2D dbg, int mapx, int mapy) {

		for(Caixa caixa: listaBoxPush){
			caixa.DesenhaSe(dbg, mapx, mapy);
		}
/*		for (int i = 0; i < listaBoxPush.size(); i++) {
			if(listaBoxPush.get(i).modoEvento >= 1 || listaBoxPush.get(i).evento <= 0){	

				dbg.drawImage(listaBoxPush.get(i).imagem, null , (int)(listaBoxPush.get(i).X- mapx),(int)(listaBoxPush.get(i).Y- mapy));
				dbg.setColor(Color.RED);
				dbg.fillOval((int)((listaBoxPush.get(i).X+listaBoxPush.get(i).raioDeColisao)- mapx), (int)((listaBoxPush.get(i).Y+listaBoxPush.get(i).raioDeColisao)- mapy), 15, 15);
				if(CanvasGame.instance.tutorial){
					dbg.setColor(Color.RED);
					dbg.drawRect((int) (listaBoxPush.get(i).X - mapx), (int) (listaBoxPush.get(i).Y - mapy), (int) (40),
							(int) (40));
				}

			}
		}*/

	}
/*
	public void colisaoRetangular(ObjetoFisico objeto) {

		int cont =0;

		for (int i = 0; i < listaBoxPush.size(); i++) {	

			if(listaBoxPush.get(i).modoEvento >= 1 || listaBoxPush.get(i).evento <= 0){		

				if(listaBoxPush.get(i).modoEvento >= 1 || listaBoxPush.get(i).evento <= 0){
					colidiu = true;	

//					if (p.X + 32 < listaBoxPush.get(i).X) {
//						colidiu = false;
//					}
//					if (p.X > listaBoxPush.get(i).X + 40) {
//						colidiu = false;
//					}
//					if (p.Y + 48 < listaBoxPush.get(i).Y) {
//						colidiu = false;
//					}
//					if (p.Y > listaBoxPush.get(i).Y + 40) {
//						colidiu = false;
//					}
//
//
//					if(colidiu == true){
//						if(CanvasGame.instance.heroi.Y < listaBoxPush.get(i).Y-15){
//							if(Y <  listaBoxPush.get(i).Y){
//								CanvasGame.instance.heroi.Y = (float)(listaBoxPush.get(i).Y - 48);
//							}
//						}else{
//							if(CanvasGame.instance.heroi.X > listaBoxPush.get(i).X + 10){
//								listaBoxPush.get(i).X -= CanvasGame.instance.heroi.velocidade * diftimeColicao / 1000.0f;
//							}else if(CanvasGame.instance.heroi.X < listaBoxPush.get(i).X){
//								listaBoxPush.get(i).X += CanvasGame.instance.heroi.velocidade * diftimeColicao / 1000.0f;
//							}
//						}
//
//					}

					cont++;

				}
			}
		}

	}
*/
	public boolean checaEvento(double x, double y) {
		for(Caixa caixa: listaBoxPush){
			if(caixa.colisaoRetangular((float)x, (float)y)){
				return true;
			}
		}		
		return false;
	}
/*
	public boolean colisaoRetangular(double tempX, double tempY) {
/*

		int cont =0;

		for (int i = 0; i < listaBoxPush.size(); i++) {	

			if(listaBoxPush.get(i).modoEvento >= 1 || listaBoxPush.get(i).evento <= 0){
				colidiu = true;	

				if (tempX + 32 < listaBoxPush.get(i).X) {
					colidiu = false;
				}
				if (tempX > listaBoxPush.get(i).X + 40) {
					colidiu = false;
				}
				if (tempY + 48 < listaBoxPush.get(i).Y) {
					colidiu = false;
				}
				if (tempY > listaBoxPush.get(i).Y + 40) {
					colidiu = false;
				}


				if(colidiu == true){
					X = listaBoxPush.get(i).X;
					Y = listaBoxPush.get(i).Y;
					return true;
				}

				cont++;

			}
		}


		if(colidiu == false){
			return false;
		}else{
			return true;

		}*//*
		return false;
	}
*/

}
